package marketplace.ejb.controller;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;

import marketplace.ejb.interfaces.IVentaEJB;
import marketplace.jpa.datas.DataContenidoDigital;
import marketplace.jpa.datas.DataReclamo;
import marketplace.jpa.datas.DataValoracion;
import marketplace.jpa.datas.DataVenta;
import marketplace.jpa.interfaces.IContenidoDigitalDAO;
import marketplace.jpa.interfaces.IVentaDAO;

@Remote
@Stateless
public class CTRLVentaEJB implements IVentaEJB{

	
	// INYECCIONES ////////////////////////////////////////////////////
	
	@EJB	private IVentaDAO dao;
	@EJB	private IContenidoDigitalDAO daoContenido;
	
	
	
	// OPERACIONES ////////////////////////////////////////////////////
	
	
	@Override
	public boolean ingresoValoracion(DataValoracion dv) throws Exception {
		return dao.ingresarValoracion(dv);
	}

	@Override
	public void eliminarValoracion(int idv) throws Exception {
		dao.eliminarValoracion(idv);
		
	}

	@Override
	public void modificarValoracion(DataValoracion dv) throws Exception {
		dao.modificarValoracion(dv);
		
	}

	
	@Override
	public boolean altaReclamo(DataReclamo dr) throws Exception {
		return dao.altaReclamo(dr);
		
	}

	@Override
	public void modificarReclamo(DataReclamo r) throws Exception {
		dao.modificarReclamo(r);
		
	}

	@Override
	public void eliminarReclamo(int idr) throws Exception {
		dao.eliminarReclamo(idr);
		
	}

	@Override
	public boolean ingresarVenta(DataVenta dv) throws Exception {
		return dao.ingresarVenta(dv);
	}

	@Override
	public List<DataVenta> getVentasCliente(String mailCliente) throws Exception {
		return dao.getVentasCliente(mailCliente);
		
	}
	
	@Override
	public List<DataVenta> obtenerVentas() throws Exception {
		return dao.obtenerVentas();		
	}
	
	
	@Override
	public ArrayList<DataVenta> obtenerInfoContenidoPorVersion(int idContenido) throws Exception {
		ArrayList<DataVenta> devolver = new ArrayList<DataVenta>();
		int idVersion = daoContenido.getUltimaVersionAutorizada(idContenido);
		//int totalDescargas = daoContenido.getCantidadDescargasContenidoDigital(idContenido);
		devolver = dao.obtenerVentasFULL(idVersion);
		return devolver;
	}
	
	@Override
	public double obtenerValoracionTotalVersion(int idVersion) throws Exception {

		double valorTotal = 0.0;
		int cantidad = 0; 		
		
		ArrayList<DataVenta> ventas = dao.obtenerVentasFULL(idVersion);
		if (!ventas.equals(null)){
			for (DataVenta dataVenta : ventas) {
				cantidad++;
				valorTotal += dataVenta.getDatavaloracion().getValor();
			}
			//Me calculo el promedio de valoracion total de las ventas sobre la version		
			valorTotal = valorTotal/cantidad;			
		}
		
		return valorTotal;
	}
	

	@Override
	public List<DataReclamo> getReclamosVenta(int idVenta) throws Exception {
		return dao.getReclamosVenta(idVenta);
	}

	@Override
	public DataReclamo buscarReclamo(int idr) throws Exception {
		return dao.buscarReclamo(idr);
		
	}

	@Override
	public DataVenta buscarVenta(int idv) throws Exception {
		return dao.buscarVenta(idv);
	}

	@Override
	public String getDescargasContenidoX() throws Exception {
		return dao.getDescargasContenidoX();
	}

	@Override
	public String getDescargasContenidoY(int idCont) throws Exception {
		return dao.getDescargasContenidoY(idCont);
	}

	@Override
	public List<DataReclamo> getReclamos() throws Exception {
		return dao.getReclamos();
	}

	@Override
	public List<DataContenidoDigital> getTopPagas() throws Exception{
		return dao.getTopPagas();
	}
	
}
